package org.example.demo.mapper;

import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
import org.example.demo.model.SysRole;

import java.util.List;

/**
 * @author fangyu
 * @version v1.0.0
 * @date 2020/9/22 6:44 下午
 */
public interface SysRoleMapper {

    /**
     * 通过角色id 查询角色信息
     *
     * @param id 主键
     * @return SysRole
     */
    @Select({"select id,role_name, enabled, create_by, create_time from sys_role where id = #{id}"})
    SysRole selectById(Long id);

    /**
     * 用户更新 - @Update注解
     *
     * @param sysRole 用户
     * @return int
     */
    @Update({"update sys_role set role_name=#{roleName}, enabled=#{enabled}, create_by=#{createBy}, create_time=#{createTime, jdbcType=TIMESTAMP} where id=#{id} "})
    int updateById(SysRole sysRole);

    /**
     * MyBatis 高级查询 => 一对多映射 -> collection 集合的嵌套结果映射 - 获取所有角色和对应的权限信息
     *
     * @return List<SysRole>
     */
    List<SysRole> selectAllRoleAndPrivileges();

    /**
     * Mybatis 高级查询 => 一对多映射 -> collection 集合的嵌套结果映射 - 获取指定用户对应的角色和权限信息
     * @param userId 指定用户id
     * @return List<SysRole>
     */
    List<SysRole> selectRoleByUserId(Long userId);

    /**
     * Mybatis 高级查询 => 鉴别器映射 -> collection 集合的嵌套结果映射 - 根据用户id获取用户的角色信息
     * @param userId 指定用户id
     * @return List<SysRole>
     */
    List<SysRole> selectRoleByUserIdChoose(Long userId);

}